/*
 * to use online script you can use jquery getScript plugin as follows:
 * 
 * $.getScript('http://sisense.com/abc.js', function(data, textStatus)
 * {
 *		// your code which requires abc.js here
 * });
 * 
 * // more info at: http://api.jquery.com/jQuery.getScript/
 *
 */


/*
 * set to true when replacing widget rendering engine.
 */
this.isCustom = true;

/*
 * exectuted after the widget controller was initialized, useful when overriding entire widget in order to instantiate entirely different implementation.
 *
 * @param {args} wraps all function arguments, including widget, dashboard and widget controller instances.
 *
 */
this.init = function (args) {

};

/*
 * executed before the widget query result is loaded to the DOM and allows canceling such beavior and replace it with custom widget implementation.
 * to cancel the default population just set 'args.cancel = true' and the widget default population will be ignored.
 *
 * @param {args} wraps all function arguments, including query result, widget, dashboard and widget controller instances.
 *
 */
this.beforeResultLoaded = function (args) {

    // -- Define Slave Key
    var slaveKey = 'Financial';
    var slaveTrigger = 'finishedSync_' + slaveKey;

    // -- Empty existing pivot
    var containerId = $(args.element).attr('id');
    var container = $('#'+containerId);
    container.remove();
    //container.closest('tbody').find('.rdTop').empty(); // remove title

    var titleRow = args.result.md.byIndex;
    var dataRow = args.result.getRow(0);

    /**
     *  Define Slave
     */
    var slave = function () {

        var db = args.widget.dashboard;
        if (!db.sync) db.sync = {};
        if (!db.sync[slaveKey]) db.sync[slaveKey] = { slaves: [] };

        var getCssClass = function (val) {

            if (val >= 0)
                return "green";
            else
                return "red";
        };

        db.sync[slaveKey].slaves.push( {
            title: titleRow[1].title,
            value: dataRow[1].value,
            data: dataRow[1].data,
            cssClass: getCssClass(dataRow[1].data)
        } );
        $(db).trigger(slaveTrigger, [slaveKey]);
    };

    /**
     *  Run Slave
     */
    slave();
};

/*
 * executed after the widget result were added to the DOM. useful to apply DOM tweaks after query result population.
 *
 * @param {args} wraps all function arguments, including query result, widget, dashboard and widget controller instances.
 *
 */
this.afterResultLoaded = function (args) {


};

/*
 * exectuted after all dashboard widget models were initialiezed. useful for binding with other widget events.
 *
 * @param {args} wraps all function arguments, including widget, dashboard and widget controller instances.
 *
 */
this.handleDashboardInitialized = function (args) {
};
